option(UPDATE "是否更新现有仓库" OFF)
option(GIT_SHALLOW "使用 shallow clone，只下载指定提交" ON)

if(EXISTS ${SOURCE_DIR} AND IS_DIRECTORY ${SOURCE_DIR})
    if(EXISTS ${SOURCE_DIR}/.git AND IS_DIRECTORY ${SOURCE_DIR}/.git)
        if(UPDATE)
            # 只有 UPDATE=ON 才执行更新
            message(STATUS "更新: ${SOURCE_DIR}")
            execute_process(
                COMMAND sh -c "
                if git rev-parse '${GIT_TAG}' >/dev/null 2>&1; then
                    git checkout -f ${GIT_TAG} && git reset --hard origin/${GIT_TAG}
                else
                    exit 1
                fi
                "
                WORKING_DIRECTORY ${SOURCE_DIR}
                RESULT_VARIABLE result
                OUTPUT_STRIP_TRAILING_WHITESPACE
            )
            if(result)
                message(FATAL_ERROR "❌ 分支/标签不存在: ${GIT_TAG}")
            else()
                message(STATUS "✅ 更新成功: ${GIT_TAG}")
            endif()
        else()
            message(STATUS "✅ 源码已存在，跳过更新: ${SOURCE_DIR}")
        endif()
    else()
        # 存在目录但不是 git 仓库 → 删除
        message(STATUS "🗑️ 非 Git 仓库，删除: ${SOURCE_DIR}")
        file(REMOVE_RECURSE ${SOURCE_DIR})
    endif()
else()
    # 目录不存在 → 继续克隆
endif()

# 只有目录不存在 或 被删除后，才克隆
if(NOT EXISTS ${SOURCE_DIR})
    message(STATUS "📥 正在克隆: ${GIT_REPOSITORY} -> ${SOURCE_DIR}")
    if(GIT_SHALLOW)
        execute_process(
            COMMAND git clone --progress --depth 1 -b ${GIT_TAG} ${GIT_REPOSITORY} ${SOURCE_DIR}
            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
            RESULT_VARIABLE clone_result
            OUTPUT_STRIP_TRAILING_WHITESPACE
        )
    else()
        execute_process(
            COMMAND git clone --progress -b ${GIT_TAG} ${GIT_REPOSITORY} ${SOURCE_DIR}
            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
            RESULT_VARIABLE clone_result
            OUTPUT_STRIP_TRAILING_WHITESPACE
        )
    endif()
    if(clone_result)
        message(FATAL_ERROR "❌ 克隆失败")
    else()
        message(STATUS "✅ 克隆成功: ${SOURCE_DIR}")
    endif()
endif()